/*
  Programa GEFE - Gestión de eventos lúdicos.
  Copyright (C) 2010  Antonio Ramírez Marti

  This program is free software: you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation, either version 3 of the License, or
  (at your option) any later version.

  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

#ifndef ACOLITOCONSIGA_H
#define ACOLITOCONSIGA_H

#include <QWidget>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlTableModel>
#include <QDataWidgetMapper>
#include <QSignalMapper>
#include <QSortFilterProxyModel>

namespace Ui {
    class AcolitoConsiga;
}

class AcolitoConsiga : public QWidget {
    Q_OBJECT
    Q_PROPERTY (bool conectado READ isConectado WRITE setConectado)
    Q_PROPERTY (int modo READ getModo WRITE setModo)

public:
    AcolitoConsiga(QWidget *parent = 0);
    ~AcolitoConsiga();

    /*!
      Devuelve el estado de conexion del acolito
      */

    bool isConectado() const;

    /*!
      Devuelve el modo actual del widget
      */

    int getModo() const;

public slots:

    /*!
      Establece el estado de conexion del acolito
      */

    void setConectado(bool estado);

    /*!
      Genera un nuevo archivo de numeros
      */

    void nuevoArchivoNumeros();

protected:
    void changeEvent(QEvent *e);

private:
    Ui::AcolitoConsiga *ui;
    QSqlTableModel *modelo;         ///< Modelo de datos de consigna
    QDataWidgetMapper *mapper;      ///< Mapper para los datos
    QSortFilterProxyModel *filtro;  ///< Modelo de filtrado
    bool flag_conectado;            ///< Bandera de conexion
    QString columnaBusqueda;        ///< Columna de busqueda

    QSignalMapper *mapModo;         ///< Mappeador de las señales para cambiar el modo de trabajo

    /*!
      prepara el Acolito
      */

    void setup();

    /*!
      Prepara el dialogo para mostrar validar
      */

    void preparaMostrarValidar();

    /*!
      Conecta la interfaz
      */

    void conectaInterfaz();

private slots:

    /*!
      Muestra u oculta el dialogo de validar DNI
      @param estado Estado del boton de mostrar el dialogo
      */

    void mostrarDialogoValidar(bool estado);

    /*!
      Crea un nuevo modelo
      */

    void creaModelo();

    /*!
      Borra el modelo
      */

    void borraModelo();

    /*!
      Conecta el modelo
      */

    void conectaModelo();

    /*!
      Cambia la columna visualizada del modelo
      */

    void setModo(int col);

    /*!
      Filtrado de busquedas
      */

    void buscarCadenaEnModelo(QString cadena);

    /*!
      Valida una entrada de DNI a la base de datos
      */

    void nuevoNumero();
};

#endif // ACOLITOCONSIGA_H
